/**
 * 股票推荐数据API接口
 */

import { apiClient } from './http-client'
import { ApiResponse, API_ENDPOINTS } from '@/lib/types/api'

// 股票推荐数据结构 - 后端统一使用驼峰格式
export interface StockRecommendation {
  code: string                    // 股票代码
  name: string                    // 股票名称
  changePercent: number           // 当前涨幅百分比
  volume: number                  // 成交量
  prevVolume: number              // 昨日成交量
  energyValue: number             // 能量值
  holdingDays: number             // 持仓天数
  score: number                   // 强度评分
  recommendationType?: 'strong' | 'weak' | 'monitoring'  // 推荐类型：强势/弱势/监控
  watchId?: number                // 关注ID（如果已关注）
  currentPrice?: number           // 当前价格
  watchTime?: string              // 关注时间
  createdAt?: string              // 创建时间
}

// 推荐数据响应结构 - 新的统一格式
// 注意：ApiResponse.data 字段直接是 StockRecommendation 数组
export type RecommendationsResponse = StockRecommendation[]

// 获取推荐数据的查询参数
export interface GetRecommendationsParams {
  target_date?: string    // 目标日期 YYYY-MM-DD
  filter?: 'daily' | 'monitoring' | 'all'  // 筛选类型：今日推荐/持续监控/全部
  sort_by?: 'default' | 'energyValue' | 'changePercent' | 'volume'
  sort_order?: 'desc' | 'asc'
}

// 执行任务的查询参数
export interface ExecuteTaskParams {
  target_date?: string    // 目标日期 YYYY-MM-DD，不传则使用当前日期
}

// 执行任务的响应数据
export interface ExecuteTaskResponse {
  target_date: string     // 执行日期
  execution_time: string  // 执行耗时
}

/**
 * 获取股票推荐数据
 * @param params 查询参数，可选
 * @param params.target_date 目标日期 YYYY-MM-DD，不传则获取今日数据
 * @param params.filter 筛选类型：daily(今日推荐)/monitoring(持续监控)/all(全部)
 * @param params.sort_by 排序字段
 * @param params.sort_order 排序方向
 */
export async function getRecommendations(
  params?: GetRecommendationsParams
): Promise<ApiResponse<RecommendationsResponse>> {
  try {
    const response = await apiClient.get<RecommendationsResponse>(
      API_ENDPOINTS.RECOMMENDATIONS,
      params
    )
    console.log('获取推荐数据成功:', response)
    return response
  } catch (error: any) {
    console.error('获取推荐数据失败:', error)
    throw error
  }
}

/**
 * 执行开盘买入任务
 * @param params 可选参数
 * @param params.target_date 目标日期，不传则使用当前日期
 */
export async function executeBuyTask(
  params?: ExecuteTaskParams
): Promise<ApiResponse<ExecuteTaskResponse>> {
  try {
    const response = await apiClient.post<ExecuteTaskResponse>(
      API_ENDPOINTS.EXECUTE_BUY,
      undefined,
      { 
        params,
        timeout: 300000 // 5分钟超时（买入任务可能需要较长时间）
      }
    )
    
    return response
  } catch (error: any) {
    console.error('执行买入任务失败:', error)
    throw error
  }
}

/**
 * 执行收盘卖出任务
 * @param params 可选参数  
 * @param params.target_date 目标日期，不传则使用当前日期
 */
export async function executeSellTask(
  params?: ExecuteTaskParams
): Promise<ApiResponse<ExecuteTaskResponse>> {
  try {
    const response = await apiClient.post<ExecuteTaskResponse>(
      API_ENDPOINTS.EXECUTE_SELL,
      undefined,
      { 
        params,
        timeout: 300000 // 5分钟超时（卖出任务可能需要较长时间）
      }
    )
    
    return response
  } catch (error: any) {
    console.error('执行卖出任务失败:', error)
    throw error
  }
}

/**
 * 推荐API接口对象
 */
export const recommendationsApi = {
  getRecommendations,
  executeBuyTask,
  executeSellTask,
}
